#include<stdio.h>
#include<unistd.h>
#include<fcntl.h>
#include<stdlib.h>

int main()
{
    // 打开输出文件，O_TRUNC 表示清空原内容，O_CREAT 表示不存在就创建
    int fd  = open("result.txt", O_WRONLY | O_CREAT | O_TRUNC, 0644);
    if(fd < 0)
    {
        perror("open failed");
        exit(1);
    }

    // 将 stdout 重定向到文件描述符 fd
    if(dup2(fd, STDOUT_FILENO) < 0)
    {
        perror("dup2 failed");
        close(fd);
        exit(1);
    }

    // 可选：关闭原始文件描述符
    close(fd);

    // 构造 ls -l 参数列表
    char* args[] = {"ls", "-l", NULL};

    // 用 execvp 执行 ls -l，输出将被写入 result.txt
    execvp(args[0], args);

    // execvp 成功不会返回，失败才会到这里
    perror("execvp failed");
    return 1;
}
